<?php

/**
 * Funções genéricas para trabalho com dados.
 *
 * @author Hyzandey
 */
class DataUtil {
    
    /**
     * Evita o lançamento de erros do PHP ao tentar carregar uma variável
     * cujo valor não está definido.
     * 
     * @param any $variavel Variável a ter o valor verificado.
     * @return any Valor da variável, caso esteja definido, ou null.
     */
    public static function getValor(&$variavel){
    	
    	return isset($variavel) ? $variavel : null;
    }
    
    /**
     * Insere em um array um novo valor, logo após a posição fornecida.
     * 
     * @param array $array array a ter valor inserido no meio.
     * @param int $posicao posição na qual será inserido o valor.
     * @param any $valor valor a ser inserido.
     */
    public static function insereDepoisIndice(&$array, $posicao, $valor){
        
        //Substitui o array pelo novo, já com o elemento inserido.
        array_splice($array, $posicao + 1, 0, array($valor));
    }
    
    /**
     * Insere em um array um valor logo após o valor dado. Contudo, valores
     * nulos são tratados como e substituidos por strings vazias.
     * 
     * @param array $array Array a ter o valor inserido.
     * @param any $valorExistente Chave que precede o local de inserção 
     *                              desejado.
     * @param any $novoValor Valor a ser inserido
     */
    public static function insereDepoisValor(&$array, $valorExistente
            , $novoValor){
        
        self::stringVaziaSeNull($valorExistente);
        
        self::trocaNullPorStringVazia($array);
        
        $posicao = array_search($valorExistente, $array);
        
        self::insereDepoisIndice($array, $posicao, $novoValor);
    }
    
    /**
     * Substitui um valor dado por uma string vazia este for nulo.
     * 
     * @param any $valor Valor cuja nulidade será verificada.
     */
    public static function stringVaziaSeNull(&$valor){
        $valor = $valor === null ? '' : $valor;
    }
    
    /**
     * Substitui todos os valores nulos de um array por strings vazias.
     * 
     * @param array $array Array a ter todos os seus valores nulos substituidos
     *                      por strings vazias.
     */
    public static function trocaNullPorStringVazia(&$array){
        $tamanho = sizeof($array);
        
        for($i = 0; $i < $tamanho; $i++){
            self::stringVaziaSeNull($array[$i]);
        }
    }
    
    public static function getValuesAsString($values, $withSingleQuotes = false){
    	
    	$string = '';
    	
    	$listSize = sizeof($values);
        
        $quote = $withSingleQuotes ? "'" : '';
    	
    	$lastIndex = $listSize - 1;
    	for ($i = 0; $i <= $lastIndex; $i++) {

            $string .= $quote . $values[$i] . $quote;

            if ($i < $lastIndex) {
                $string .= ', ';
            }
        }
    	
    	return $string;
    }
}

function removeLeadingLineBreak($string){
	$firstChar = substr($string, 0, 1);
	if($firstChar == "\n"){
		return substr($string, 1);
	}
	return $string;
}

?>
